/**
 * Author(s): xuming.Wong <xuming.Wong@gmail.com>
 */
#ifndef __PQClientPrerequisites_H__
#define __PQClientPrerequisites_H__

/*PQClient core lib dependencies' header
*/
// Platform-specific stuff
#include "PQPlatform.h"
#include "PQEnums.h"

//use some ogre class
namespace Ogre
{
	//used as base of our terrain system
	class TerrainGlobalOptions;
	class TerrainGroup;
	class TerrainPaging;
	class PageManager;
	class PagedWorld;

}

namespace PQClient
{
    // Define PQClient version
    #define PQClient_Version_Major 0
    #define PQClient_Version_Minor 1
	#define PQClient_Version_Patch 1
    #define PQClient_Version_Name "Seeker"

    #define PQClient_Version    ((PQClient_Version_Major << 16) | (PQClient_Version_Minor << 8) | PQClient_Version_Patch)

	// Pre-declare classes
	// Allows use of pointers in header files without including individual .h
	// so decreases dependencies between files
	class Object;
	class Component;
	class GameObject;
	class SceneObject;
	class CameraObject;
	class Event;

	//typedefs
	typedef std::vector<std::string> StringVector;
	typedef std::map<std::string,int> StringIntMap;
	typedef std::vector<Object*> ObjectVector;
	typedef std::vector<Component*> ComponentVector;
	typedef std::vector<GameObject*> GameObjectVector;
}

#endif
